package com.bjsxt.Lambda;

public class Test {

    public static int doubleNum2(int a){
        return 2*a;
    }
    public static void main(String[] args) {
        //无返回值无参数接口实现
//        NoReturnNoParam noReturnNoParam= ()->{
//            System.out.println("NoReturnNoParam");
//        };
        NoReturnNoParam noReturnNoParam= ()->System.out.println("NoReturnNoParam");//简化版
        noReturnNoParam.method();

        // 一个参数，无返回值接口的实现
//        NoReturnOneParam noReturnOneParam= (int a)->{
//            System.out.println("noReturnOneParam "+a);
//        };
        NoReturnOneParam noReturnOneParam= a->System.out.println("noReturnOneParam "+a);//简化版
        noReturnOneParam.method(10);

        //无返回值，多个参数
//        NoReturnMultiParam noReturnMultiParam = (int a,int b)->{
//            System.out.println("noReturnMultiParam "+(a+b));
//        };
        NoReturnMultiParam noReturnMultiParam = (a,b)->System.out.println("noReturnMultiParam "+(a+b));//简化版

        noReturnMultiParam.mothod(10,29);
        //有返回值无参数
//        ReturnNoParam returnNoParam =()->{
//            System.out.print("ReturnNoParam");
//            return 30;
//        };
        ReturnNoParam returnNoParam =()->30+20; //简化版
        System.out.println(returnNoParam.method());

        //有返回值一个参数
//        ReturnOneParam returnOneParam  =(int a)->{
//            System.out.print("returnOneParam ");
//            return a;
//        };
        ReturnOneParam returnOneParam  =a-> a;//简化版
        System.out.println(returnOneParam.method(49));

        //有返回值有多个参数
//        ReturnMultiParam returnMultiParam = (int a,int b)->{
//            System.out.print("returnMultiParam ");
//            return a+b;
//        };
        ReturnMultiParam returnMultiParam = (a, b)->a+b;

        System.out.println(returnMultiParam.method(90,66));
    }
}

@FunctionalInterface
interface NoReturnNoParam{
    void method();
}

@FunctionalInterface
interface NoReturnOneParam{
    void method(int a);
}
@FunctionalInterface
interface NoReturnMultiParam{
    void mothod(int a, int b);
}

@FunctionalInterface
interface ReturnNoParam{
    int method();
}

@FunctionalInterface
interface ReturnMultiParam{
    int method(int a, int b);
}
@FunctionalInterface
interface ReturnOneParam{
    int method(int a);
}


